home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_xemacs.idb / usr / freeware / lib / xemacs-20.4 / lisp / language / japanese.el.z / japanese.el
Encoding:
Text File  |  1998-05-21  |  7.9 KB  |  233 lines

  1. ;;; japanese.el --- Japanese support
  2.  
  3. ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
  4. ;; Licensed to the Free Software Foundation.
  5. ;; Copyright (C) 1997 MORIOKA Tomohiko
  6.  
  7. ;; Keywords: multilingual, Japanese
  8.  
  9. ;; This file is part of XEmacs.
  10.  
  11. ;; XEmacs is free software; you can redistribute it and/or modify it
  12. ;; under the terms of the GNU General Public License as published by
  13. ;; the Free Software Foundation; either version 2, or (at your option)
  14. ;; any later version.
  15.  
  16. ;; XEmacs is distributed in the hope that it will be useful, but
  17. ;; WITHOUT ANY WARRANTY; without even the implied warranty of
  18. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  19. ;; General Public License for more details.
  20.  
  21. ;; You should have received a copy of the GNU General Public License
  22. ;; along with XEmacs; see the file COPYING.  If not, write to the Free
  23. ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  24. ;; 02111-1307, USA.
  25.  
  26. ;;; Commentary:
  27.  
  28. ;; For Japanese, character sets JISX0201, JISX0208, JISX0212 are
  29. ;; supported.
  30.  
  31. ;;; Code:
  32.  
  33. ;;; Syntax of Japanese characters.
  34. (modify-syntax-entry 'katakana-jisx0201 "w")
  35. (modify-syntax-entry 'japanese-jisx0212 "w")
  36.  
  37. (modify-syntax-entry 'japanese-jisx0208 "w")
  38. (loop for row in '(33 34 40)
  39.       do (modify-syntax-entry `[japanese-jisx0208 ,row] "_"))
  40. (loop for char in '(?$B!<(B ?$B!+(B ?$B!,(B ?$B!3(B ?$B!4(B ?$B!5(B ?$B!6(B ?$B!7(B ?$B!8(B ?$B!9(B ?$B!:(B ?$B!;(B)
  41.       do (modify-syntax-entry char "w"))
  42. (modify-syntax-entry ?\$B!J(B "($B!K(B")
  43. (modify-syntax-entry ?\$B!N(B "($B!O(B")
  44. (modify-syntax-entry ?\$B!P(B "($B!Q(B")
  45. (modify-syntax-entry ?\$B!V(B "($B!W(B")
  46. (modify-syntax-entry ?\$B!X(B "($B!Y(B")
  47. (modify-syntax-entry ?\$B!K(B ")$B!J(B")
  48. (modify-syntax-entry ?\$B!O(B ")$B!N(B")
  49. (modify-syntax-entry ?\$B!Q(B ")$B!P(B")
  50. (modify-syntax-entry ?\$B!W(B ")$B!V(B")
  51. (modify-syntax-entry ?\$B!Y(B ")$B!X(B")
  52.  
  53. ;;; Character categories S, A, H, K, G, Y, and C
  54. (define-category ?S "Japanese 2-byte symbol character.")
  55. (modify-category-entry [japanese-jisx0208 33] ?S)
  56. (modify-category-entry [japanese-jisx0208 34] ?S)
  57. (modify-category-entry [japanese-jisx0208 40] ?S)
  58. (define-category ?A "Japanese 2-byte Alphanumeric character.")
  59. (modify-category-entry [japanese-jisx0208 35] ?A)
  60. (define-category ?H "Japanese 2-byte Hiragana character.")
  61. (modify-category-entry [japanese-jisx0208 36] ?H)
  62. (define-category ?K "Japanese 2-byte Katakana character.")
  63. (modify-category-entry [japanese-jisx0208 37] ?K)
  64. (define-category ?G "Japanese 2-byte Greek character.")
  65. (modify-category-entry [japanese-jisx0208 38] ?G)
  66. (define-category ?Y "Japanese 2-byte Cyrillic character.")
  67. (modify-category-entry [japanese-jisx0208 39] ?Y)
  68. (define-category ?C "Japanese 2-byte Kanji characters.")
  69. (loop for row from 48 to 126
  70.       do (modify-category-entry `[japanese-jisx0208 ,row] ?C))
  71. (loop for char in '(?$B!<(B ?$B!+(B ?$B!,(B)
  72.       do (modify-category-entry char ?K)
  73.          (modify-category-entry char ?H))
  74. (loop for char in '(?$B!3(B ?$B!4(B ?$B!5(B ?$B!6(B ?$B!7(B ?$B!8(B ?$B!9(B ?$B!:(B ?$B!;(B)
  75.       do (modify-category-entry char ?C))
  76. (modify-category-entry 'japanese-jisx0212 ?C)
  77.  
  78. (defvar japanese-word-regexp
  79.   "\\cA+\\cH*\\|\\cK+\\cH*\\|\\cC+\\cH*\\|\\cH+\\|\\ck+\\|\\sw+"
  80.   "Regular expression used to match a Japanese word.")
  81.  
  82. (set-word-regexp japanese-word-regexp)
  83. (setq forward-word-regexp  "\\w\\>")
  84. (setq backward-word-regexp "\\<\\w")
  85.  
  86. ;;; Paragraph setting
  87. (setq sentence-end
  88.       (concat
  89.        "\\("
  90.        "\\("
  91.        "[.?!][]\"')}]*"
  92.        "\\|"
  93.        "[$B!%!)!*(B][$B!O!I!G!K!Q!M!S!U!W!Y(B]*"
  94.        "\\)"
  95.        "\\($\\|\t\\|  \\)"
  96.        "\\|"
  97.        "$B!#(B"
  98.        "\\)"
  99.        "[ \t\n]*"))
  100. (setq paragraph-start    "^[ $B!!(B\t\n\f]")
  101. (setq paragraph-separate "^[ $B!!(B\t\f]*$")
  102.  
  103. ;; EGG specific setup
  104. (define-egg-environment 'japanese
  105.   "Japanese settings for egg."
  106.   (lambda ()
  107.     (when (not (featurep 'egg-jpn))
  108.       (load "its-hira")
  109.       (load "its-kata")
  110.       (load "its-hankaku")
  111.       (load "its-zenkaku")
  112.       (setq its:*standard-modes*
  113.         (append
  114.          (list (its:get-mode-map "roma-kana")
  115.            (its:get-mode-map "roma-kata")
  116.            (its:get-mode-map "downcase")
  117.            (its:get-mode-map "upcase")
  118.            (its:get-mode-map "zenkaku-downcase")
  119.            (its:get-mode-map "zenkaku-upcase"))
  120.          its:*standard-modes*))
  121.       (provide 'egg-jpn))
  122.     (setq wnn-server-type 'jserver)
  123.     ;; Can't do this here any more.  Must do it when selecting egg-wnn
  124.     ;; or egg-sj3
  125.     ;; (setq egg-default-startup-file "eggrc-wnn")
  126.     (setq-default its:*current-map* (its:get-mode-map "roma-kana"))))
  127.  
  128. ;; stuff for providing gramatic processing of Japanese text
  129. ;; something like this should probably be created for all environments...
  130.  
  131. (defvar aletter (concat "\\(" ascii-char "\\|" kanji-char "\\)"))
  132. (defvar kanji-space-insertable (concat 
  133.        "$B!"(B" aletter                   "\\|"
  134.        "$B!#(B" aletter                   "\\|"
  135.        aletter "$B!J(B"                   "\\|"
  136.        "$B!K(B" aletter                   "\\|"
  137.        ascii-alphanumeric  kanji-kanji-char "\\|"
  138.        kanji-kanji-char    ascii-alphanumeric ))
  139.  
  140. (defvar space-insertable (concat " " aletter "\\|" kanji-space-insertable)
  141.   "Regexp for finding points that can have spaces inserted into them for justification")
  142.  
  143. ;; (make-coding-system
  144. ;;  'iso-2022-jp 2 ?J
  145. ;;  "ISO 2022 based 7bit encoding for Japanese (MIME:ISO-2022-JP)"
  146. ;;  '((ascii japanese-jisx0208-1978 japanese-jisx0208
  147. ;;           latin-jisx0201 japanese-jisx0212 katakana-jisx0201 t) nil nil nil
  148. ;;    short ascii-eol ascii-cntl seven))
  149.  
  150. ;; (define-coding-system-alias 'junet 'iso-2022-jp)
  151.  
  152. (make-coding-system
  153.  'iso-2022-jp 'iso2022
  154.  "Coding-system used for communication with mail and news in Japan."
  155.  '(charset-g0 ascii
  156.    short t
  157.    seven t
  158.    input-charset-conversion ((latin-jisx0201 ascii)
  159.                  (japanese-jisx0208-1978 japanese-jisx0208))
  160.    mnemonic "MULE/7bit"
  161.    ))
  162.  
  163. (copy-coding-system 'iso-2022-jp 'junet)
  164.  
  165. ;; (make-coding-system
  166. ;;  'shift_jis 1 ?S
  167. ;;  "Coding-system of Shift-JIS used in Japan." t)
  168.  
  169. (make-coding-system
  170.  'shift_jis 'shift-jis
  171.  "Coding-system of Shift-JIS used in Japan."
  172.  '(mnemonic "Ja/SJIS"))
  173.  
  174. ;;(define-coding-system-alias 'shift_jis 'sjis)
  175.  
  176. (copy-coding-system 'shift_jis 'sjis)
  177.  
  178. ;; (make-coding-system
  179. ;;  'iso-2022-jp-1978-irv 2 ?J
  180. ;;  "Coding-system used for old jis terminal."
  181. ;;  '((ascii t) nil nil nil
  182. ;;    short ascii-eol ascii-cntl seven nil nil use-roman use-oldjis))
  183.  
  184. (make-coding-system
  185.  'iso-2022-jp-1978-irv 'iso2022
  186.  "Coding-system used for old JIS terminal."
  187.  '(charset-g0 ascii
  188.    short t
  189.    seven t
  190.    output-charset-conversion ((ascii latin-jisx0201)
  191.                   (japanese-jisx0208 japanese-jisx0208-1978))
  192.    mnemonic "Ja-78/7bit"
  193.    ))
  194.  
  195. ;;(define-coding-system-alias 'iso-2022-jp-1978-irv 'old-jis)
  196.  
  197. (copy-coding-system 'iso-2022-jp-1978-irv 'old-jis)
  198.  
  199. ;; (make-coding-system
  200. ;;  'euc-japan-1990 2 ?E
  201. ;;  "Coding-system of Japanese EUC (Extended Unix Code)."
  202. ;;  '(ascii japanese-jisx0208 katakana-jisx0201 japanese-jisx0212
  203. ;;          short ascii-eol ascii-cntl nil nil single-shift))
  204.  
  205. (make-coding-system
  206.  'euc-jp 'iso2022
  207.  "Coding-system of Japanese EUC (Extended Unix Code)."
  208.  '(charset-g0 ascii
  209.    charset-g1 japanese-jisx0208
  210.    charset-g2 katakana-jisx0201
  211.    charset-g3 japanese-jisx0212
  212.    short t
  213.    mnemonic "Ja/EUC"
  214.    ))
  215.  
  216. ;;(define-coding-system-alias 'euc-japan-1990 'euc-japan)
  217.  
  218. (copy-coding-system 'euc-jp 'euc-japan) ; only for w3
  219. (copy-coding-system 'euc-jp 'japanese-euc)
  220.  
  221. (set-language-info-alist
  222.  "Japanese" '((setup-function . setup-japanese-environment)
  223.           (tutorial . "TUTORIAL.ja")
  224.           (charset . (japanese-jisx0208 japanese-jisx0208-1978
  225.               japanese-jisx0212 latin-jisx0201
  226.               katakana-jisx0201))
  227.           (coding-system . (iso-2022-jp euc-jp
  228.                 shift_jis iso-2022-jp-1978-irv))
  229.           (sample-text . "Japanese ($BF|K\8l(B)        $B$3$s$K$A$O(B, (I:]FAJ(B")
  230.           (documentation . t)))
  231.  
  232. ;;; japanese.el ends here
  233.